import router, { asyncRoutes } from './router'
import store from './store'
// import { Message } from 'element-ui'
// 导入路由跳转进度条模块
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style

import getPageTitle from '@/utils/get-page-title'

// NProgress.configure({ showSpinner: false }) // NProgress Configuration
// 白名单优化
const whiteList = ['/login', '/404'] // no redirect whitelist
// 通过路由守卫对登录权限的控制
router.beforeEach(async(to, from, next) => {
  // 将登录情况分为两种（有无token）
  // 有token的情况下，为已登录的状态
  // 从user模块中，获取token令牌

  NProgress.start()
  // 动态设置网页标题
  document.title = getPageTitle(to.meta.title)
  const token = store.state.user.token
  if (token) {
    // 如果要去登录页，将直接跳转到首页
    if (to.path === 'login') {
      next('/')
      NProgress.done()// 指定了跳转页面，那么他就不会经过router.afterEach
    } else {
      // 如果要去的页面为其他页（除去登录页以外的页面），则随意通行
      // 触发actions中的函数，发送请求获取用户信息
      // 代码优化
      if (!store.state.user.userInfo.userId) {
        const menus = await store.dispatch('user/getUserInfo')
        console.log(menus, '用户页面级别的权限数据')
        // 使用权限信息筛选出用户可以访问放入动态路由
        const filterRoutes = asyncRoutes.filter(route => {
          return menus.includes(route.children[0].name)
        })
        router.addRoutes(filterRoutes)
        store.commit('menus/setMenus', filterRoutes)
      }
      next()
    }
  } else {
    // 无token未登录的情况下（登录页、其他页）
    if (whiteList.includes(to.path)) {
      next()
    } else {
    // 未登录的情况下如果要去其他页，首先的去登录页
    // includes,返回TRUE，若不在，则返回FALSE
      next('/login')
      NProgress.done()// 结束进度条
    }
  }
})
// 页面跳转完成会经过这个钩子函数
router.afterEach(() => {
  // finish progress bar
  NProgress.done()
})
